/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package polylifegame.view;

import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import polylifegame.model.Environnement;
import polylifegame.model.SimulateurManager;

/**
 *
 * @author epulapp
 */
public final class ButtonsView extends JPanel {
    
    //<editor-fold defaultstate="collapsed" desc="Variables de classe">
    //Liste des boutons du Panel
    private JButton btnInit;
    private JButton btnPause;
    private JButton btnStart;
    private JButton btnEmpty;
    
    //Groupe de boutons radios
    private ButtonGroup groupBtnRadio;
    private JRadioButton btnActiverSurvolSouris;
    private JRadioButton btnDesactiverSurvolSouris;
    
    //Liste déroulante des motifs disponibles
    private JComboBox motifBox;
    
    //Label images
    private JLabel lblPicture;
    
    //Dimension des boutons
    private final Integer WIDTHBUTTON = 50;
    private final Integer HEIGHTBUTTON = 20;
    
    //Référence sur Environnement
    private Environnement environnement;
    //Référence sur le SimulateurManager
    private SimulateurManager simulateur;
    //Référence sur la vue principale
    private VuePrincipale mainView;
    //</editor-fold>
    
    
    //<editor-fold defaultstate="collapsed" desc="Constructeurs">
    /**
     * Constructeur personnalisé
     * @param mainView : Référence sur la vue principal
     * @param environnement
     * @param simulateur
     * @param survolActif 
     */
    public ButtonsView(VuePrincipale mainView, Environnement environnement, SimulateurManager simulateur, Boolean survolActif){
        
        //Initialisation du panel
        //this.setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
        this.setLayout(new GridLayout(10,1));
        
        //Référencer l'environnement
        this.environnement = environnement;
        //Référencer le simulateur
        this.simulateur = simulateur;
        //Référencer la vue principale
        this.mainView = mainView;
        
        //Initialisation des boutons
        this.insertSpace();
        this.initMotifCombo();
        this.initBtnInitialiser();
        this.initBtnPause();
        this.initBtnStart();
        this.initBtnEmpty();
        this.initRadioButtons();
        
    }
    //</editor-fold>
    
    //<editor-fold defaultstate="collapsed" desc="Méthodes de classe">
    /*
     * Initilisation du bouton initialiser
     */
    public void initBtnInitialiser(){
        //Panel contenant le bouton
        JPanel panelInit = new JPanel(new FlowLayout());
        //Bouton initialiser
        this.btnInit = new JButton("   Initialiser   ");
        
        //Controller du bouton
        this.btnInit.addActionListener(new ActionListener(){
            
            @Override
            public void actionPerformed(ActionEvent e) {
                simulateur.pause();
                if(motifBox.getSelectedIndex() == 0)
                    environnement.generationAleatoire();
                else
                    environnement.generationMotif(motifBox.getSelectedIndex());
                
            };
            
        });
        
        //Ajout ud bouton à notre composant
        panelInit.add(this.btnInit);
        //Ajout du coonteneur de bouton à notre panel de boutons
        this.add(panelInit);
    }
    
    /*
     *  Initilisation du bouton Pause
     */
    public void initBtnPause(){
        //Panel contenant le bouton
        JPanel panelPause = new JPanel(new FlowLayout());
        //Bouton Pause
        this.btnPause = new JButton("     Pause     ");
        
        //Controller du bouton
        this.btnPause.addActionListener(new ActionListener(){
            
            @Override
            public void actionPerformed(ActionEvent e) {
                simulateur.pause();
            }
            
        });
        
        //Ajout ud bouton à notre composant
        panelPause.add(this.btnPause);
        //Ajout du coonteneur de bouton à notre panel de boutons
        this.add(panelPause);
    }
    
    /*
     *  Initilisation du bouton Pause
     */
    public void initBtnStart(){
        //Panel contenant le bouton
        JPanel panelStart = new JPanel(new FlowLayout());
        //Bouton Start
        this.btnStart = new JButton("     Start     ");
        
        //Controller du bouton
        this.btnStart.addActionListener(new ActionListener(){
            
            @Override
            public void actionPerformed(ActionEvent e) {
                simulateur.play();
            }
            
        });
        
        //Ajout ud bouton à notre composant
        panelStart.add(this.btnStart);
        //Ajout du coonteneur de bouton à notre panel de boutons
        this.add(panelStart);
    }
    
    /*
     * Initilisation du bouton qui permet de vider la grille
     */
    public void initBtnEmpty(){
        //Panel contenant le bouton
        JPanel panelEmpty = new JPanel(new FlowLayout());
        //Bouton Start
        this.btnEmpty = new JButton("Vider la grille");
        
        //Controller du bouton
        this.btnEmpty.addActionListener(new ActionListener(){
            
            @Override
            public void actionPerformed(ActionEvent e) {
                simulateur.pause();
                environnement.reinitialiserEnvironnement();
            }
            
        });
        
        //Ajout ud bouton à notre composant
        panelEmpty.add(this.btnEmpty);
        //Ajout du coonteneur de bouton à notre panel de boutons
        this.add(panelEmpty);
    }
    
    /*
     * Initialisation des bouton radio
     */
    public void initRadioButtons(){
        
        //Initialisation du groupe de boutons
        this.groupBtnRadio = new ButtonGroup();
        
        //Initialisation du bouton d'activation survol souris
        this.btnActiverSurvolSouris = new JRadioButton("Activer le survol   ");
        this.btnActiverSurvolSouris.addActionListener(new ActionListener(){
            
            //On active le survol
            @Override
            public void actionPerformed(ActionEvent e) {
                mainView.setIsMouseOverActivated(true);
                System.out.println("Survol souris activé !");
            }
            
        });
        this.groupBtnRadio.add(this.btnActiverSurvolSouris);
        this.add(this.btnActiverSurvolSouris);
        
        //Initialiation du bouton désactivation survol souris
        this.btnDesactiverSurvolSouris = new JRadioButton("Desactiver le survol   ");
        this.btnDesactiverSurvolSouris.addActionListener(new ActionListener(){
            
            //On desactive le survol
            @Override
            public void actionPerformed(ActionEvent e) {
                mainView.setIsMouseOverActivated(false);
                System.out.println("Survol souris désactivé !");
            }
            
        });
        this.groupBtnRadio.add(this.btnDesactiverSurvolSouris);
        
        this.add(this.btnDesactiverSurvolSouris);
        
        //Sélection du survol désactivé par défaut
        this.btnDesactiverSurvolSouris.setSelected(true);
    }
    
    /*
     * Initiasation du combobox
     */
    public void initMotifCombo() {
        //Panel contenant les boutons radios
        JPanel panelComboMotif = new JPanel(new FlowLayout());
        
        String[] listeMotifs = { "Motif aléatoire", "Motif carré", "Motif rétrécissement", "Motif étoile", "Motif rétrécissement inverse" };
        
        //Create the combo box, select item at index 4.
        //Indices start at 0, so 4 specifies the pig.
        this.motifBox = new JComboBox(listeMotifs);
        this.motifBox.setSelectedIndex(0);
        
        panelComboMotif.add(this.motifBox);
        
        this.add(panelComboMotif);
    }
    
    /**
     * Insertion d'un espace
     */
    public void insertSpace(){
        //Panel vide pour espacer l'affichage
        JPanel panelSpace = new JPanel(new FlowLayout());
        this.add(panelSpace);
    }
    //</editor-fold>
}

//</editor-fold>
